
/**
 * Uniwersalny Układ Współrzędnych. 
 * Automatycznie konwertuje współrzędne pomiędzy systemem sferycznym i kartezjańskim. 
 * W obie strony. Po każdej modyfikacji dowolnej współrzędnej.
 * PHI - kąt elewacji
 * THETA - kąt azymutu
 * Implementacja oparta o: http://mathworld.wolfram.com/SphericalCoordinates.html 
 */ 
class Coordinates {
    public:
        Coordinates();
        /**
         * Konstruktor przyjmujacy wspolrzedne
         * Od implementacji zależy czy to są kartezjańskie czy sferyczne.
         */ 
        Coordinates(double, double, double);
        /**
         * Gettery i settery współrzędnych kartezjańskich
         */ 
        double getX();
        void setX(double);
        double getY();
        void setY(double);
        double getZ();
        void setZ(double);
        /**
         * Gettery i settery współrzędnych sferycznych
         */ 
        double getDistance();
        void setDistance(double);
        double getAzimuth();
        void setAzimuth(double);
        double getElevation();
        void setElevation(double);

    private:
        /**
         * Metoda wywoływana po każdej zmianie współrzędnych kartezjańskich aktualizuje współrzędne sferyczne
         */  
        void updateSphericalCoordinates();
        /**
         * Metoda wywoływana po każdej zmianie współrzędnych sferycznych aktualizuje współrzędne kartezjańskie
         */ 
        void updateCartesianCoordinates();
        /**
         * Współrzędne kartezjańskie
         */ 
        double x, y, z;
        /**
         * Współrzędne sferyczne
         */ 
        double distance, azimuth, elevation;
};
